iT邦幫忙

2021 iThome 鐵人賽

DAY 4
0
自我挑戰組

IOS、Python自學心得30天系列 第 4

IOS、Python自學心得30天 Day-4 TensorFlow 資料處理

  • 分享至 

  • xImage
  •  

前言:
到了要開始處理資料的部分,因為影像資料會有檔案太大或是大小不一的問題,所以都要先預設成固定的格式來模擬訓練

程式碼:
方案一

train = tfds.load('mnist', split='train', as_supervised=True) #訓練資料
test = tfds.load('mnist', split='test', as_supervised=True) #測試資料
def format_image(image, label):
  image = tf.cast(image, dtype=tf.float32)
  image = image / 255.0
  return  image, label

BATCH_SIZE = 32
BUFFER_SIZE = 10000

train_batches = train.cache().shuffle(BUFFER_SIZE).map(format_image).batch(BATCH_SIZE).prefetch(1)
test_batches = test.cache().map(format_image).batch(BATCH_SIZE).prefetch(1)

cache: 將資料全部載入快取記憶體,可加速模型訓練
shuffle: 洗牌以打亂資料順序
map: 使用某個函數來處理資料,這裡用到的是自己寫的 format_image 函數
batch: 將數個資料組成一個批次,這裡一批包含 32 個樣本: (image, label)
prefetch: 在 GPU 或 TPU 訓練資料的過程,預先用 CPU 準備好下一批資料,可加速訓練過程
(TPU)張量處理單元:是一種定製化的 ASIC 晶片,為谷歌的主要產品提供了計算支持,包括翻譯、照片、搜索助理和 Gmail 等,並專門用於機器學習工作負載

方案二

# 資料路徑
DATASET_PATH  = 'D://20210901/Demo1/dogImages'

# 影像大小
IMAGE_SIZE = (224, 224)

# 影像類別數
NUM_CLASSES = 2

# 若 GPU 記憶體不足,可調降 batch size 或凍結更多層網路
BATCH_SIZE = 8

# 凍結網路層數
FREEZE_LAYERS = 2

# Epoch 數
NUM_EPOCHS = 20

# 模型輸出儲存的檔案
WEIGHTS_FINAL = 'model-resnet50-final.h5'

# 透過 data augmentation 產生訓練與驗證用的影像資料
train_datagen = ImageDataGenerator(rotation_range=40,
                                   width_shift_range=0.2,
                                   height_shift_range=0.2,
                                   shear_range=0.2,
                                   zoom_range=0.2,
                                   channel_shift_range=10,
                                   horizontal_flip=True,
                                   fill_mode='nearest')
train_batches = train_datagen.flow_from_directory(DATASET_PATH + '/train',
                                                  target_size=IMAGE_SIZE,
                                                  interpolation='bicubic',
                                                  class_mode='categorical',
                                                  shuffle=True,
                                                  batch_size=BATCH_SIZE)

valid_datagen = ImageDataGenerator()
valid_batches = valid_datagen.flow_from_directory(DATASET_PATH + '/valid',
                                                  target_size=IMAGE_SIZE,
                                                  interpolation='bicubic',
                                                  class_mode='categorical',
                                                  shuffle=False,
                                                  batch_size=BATCH_SIZE)

# 輸出各類別的索引值
for cls, idx in train_batches.class_indices.items():
    print('Class #{} = {}'.format(idx, cls))


上一篇
IOS、Python自學心得30天 Day-3 TensorFlow 模組
下一篇
IOS、Python自學心得30天 Day-5 TensorFlow 建立和訓練模型
系列文
IOS、Python自學心得30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言